In a storage subsystem under test it is challenging to detect defective behavior for erroneous writes including torn writes and dropped writes. A dropped write occurs when a write operation to a storage subsystem acknowledges completion but the storage subsystem does not receive the complete set of data.
A torn write occurs when a write operation to a storage subsystem experiences an error and the storage subsystem does not receive the complete set of data. The actual storage subsystem data is expected to be a mix of the old data that was on the storage system disk before the write operation started and the new data that is associated with the planned write to the storage subsystem. The actual data on the storage subsystem could be all old data, all new data, or any mix in-between.
When an error occurs, a storage subsystem will perform one of the following actions: write a complete logical block (for instance five hundred and twelve bytes); not write the logical block at all; or return a medium or hardware error for that logical block if the logical block is partially written to. Therefore, for an unknown torn error, it can be expected that data boundaries between old and new data will occur at logical block boundaries. A storage subsystem will guarantee that the boundary between the old and the new data will occur in certain places. It would desirable to be able to use these characteristics to determine errors.
When developing a storage subsystem, test engineers will run test programs on application hosts. The test programs perform read and write operations to the storage subsystem to validate that the storage subsystem is behaving as intended. Under normal conditions (that is when there are no error conditions present), test programs will expect the data read from the storage subsystem to match exactly the data that was written to the storage subsystem. If, however, an error occurs (such as a broken cable, or software failure), then the read and/or write operations to the storage subsystem will not complete reliably. The test program cannot expect the data read back from the storage subsystem to match exactly the data that was previously written. Even though a write has failed, however, the storage subsystem specification may state that there are some constraints on what data can be returned to a subsequent read from the same area of the storage subsystem. It would be desirable to be able to confirm that these constraints are met.